home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / libs / unixlib.lha / unix / src / sigprocmask.c < prev    next >
C/C++ Source or Header  |  1996-01-04  |  667b  |  41 lines

  1. #include "amiga.h"
  2. #include "signals.h"
  3.  
  4. /*
  5.  * Manipulate signal mask.
  6.  */
  7.  
  8. int
  9. sigprocmask (int how, const sigset_t *mask, sigset_t *omask)
  10. {
  11.     int i, imask;
  12.  
  13.     __chkabort();
  14.  
  15.     if (omask)
  16.         *omask = _sig_mask;
  17.  
  18.     if (mask) {
  19.         switch (how) {
  20.         case SIG_BLOCK:
  21.             _sig_mask |= *mask;
  22.         break;
  23.         case SIG_UNBLOCK:
  24.             _sig_mask &= ~*mask;
  25.         break;
  26.         case SIG_SETMASK:
  27.             _sig_mask = *mask;
  28.         break;
  29.         default:
  30.             errno = EINVAL;
  31.         return -1;
  32.     }
  33.     /* Check all pending signals */
  34.     for (i = 0, imask = 1; i < NSIG; i++, imask <<= 1)
  35.         if ((_sig_pending & imask) && !(_sig_mask & imask))
  36.         _sig_dispatch(i);
  37.     }
  38.  
  39.     return 0;
  40. }
  41.